//package com.antbank.bkdecisionaccess.service.script;
//
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//
//import lombok.extern.slf4j.Slf4j;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.List;
//
///**
// * @date 2021/5/17 11:14
// */
//@Slf4j
//@Component
//public class InvokeMethodScript {
//
//    private static final Logger LOGGER = LoggerFactory.getLogger(InvokeMethodScript.class);
//
//    public static String invokeInterfaceName = "invokeMethodScript.getDataByInterface( \"" +
//            "#interfaceRel\", #params )";
//
//    public static String invokeSQLName = "invokeMethodScript.getDataBySQL( #params )";
//
//    public Object getDataByInterface(String interfaceRefName, Object request) {
//        log.info("getDataByManagement input interfaceRefName:{}| request:{}", interfaceRefName, JSONObject.toJSONString(request));
//        Object invokeResult = null;
//        try {
//            DecisionFieldInterfaceDTO interfaceDTO = FieldInterfaceCacheLogic.getFieldInterfaceCache(FieldInterfaceCacheLogic.getInterfaceRefNameCache(interfaceRefName));
//
//            if (interfaceDTO == null) {
//                log.error("get interfaceCache fail, interfaceRefName={}", interfaceRefName);
//                return null;
//            }
//            //获取泛化引用对象实例
////            GenericService genericService = getGenericServiceByTask(interfaceDTO);
//            log.info("调用脚本中自动映射方法,入参={}", request);
//
//            JSONArray reqArray = JSONArray.parseArray(request.toString());
//            Object[] objArray = reqArray.toArray();
//
//
////            invokeResult = genericService.$invoke(interfaceDTO.getMethodName(), null, objArray);
//            log.info("script invokeResult={}", invokeResult);
//
//        } catch (Exception e) {
//            log.error("query by server name error{}", e);
//        }
//        return invokeResult;
//    }
//
//    /**
//     * 执行脚本中的SQL语句
//     *
//     * @param sql      待执行的SQL
//     * @param dbSource
//     * @return
//     */
//    public Object getDataBySQL(Object sql, Object dbSource) {
//
//        LOGGER.info("script inner sql execute, sql = {}, dbSource = {}", sql, dbSource);
//        Object invokeResult = null;
//
//        try {
//            SqlTaskService sqlTaskService = ApplicationContextUtils.getApplicationContext().getBean(SqlTaskService.class);
//            invokeResult = sqlTaskService.executeSql(String.valueOf(sql), String.valueOf(dbSource));
//        } catch (Exception e) {
//            LOGGER.error("script inner sql execute error, sql = {}, dbSource = {}, e = {}", sql, dbSource, e);
//        }
//
//        return invokeResult;
//    }
//
//    private GenericService getGenericServiceByTask(DecisionFieldInterfaceDTO interfaceDTO) {
//
//
//        // 连接注册中心配置
//        Collection<RegistryConfig> registries = ApplicationModel.getConfigManager().getRegistries();
//        List<RegistryConfig> registerList = new ArrayList<RegistryConfig>(registries);
//
//        org.apache.dubbo.config.ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
//        reference.setRegistries(registerList);
//        reference.setInterface(interfaceDTO.getInterfaceName());
//        reference.setGeneric(true); // 声明为泛化接口
//        reference.setVersion(interfaceDTO.getVersion());
//        //由于历史原因，这里统一设置的3000ms超时时间,最大不超过3500ms
//
//        //最大3500ms
//        reference.setTimeout(3500);
//
//        ReferenceConfigCache cache = ReferenceConfigCache.getCache();
//        return cache.get(reference);
//
//    }
//
//}